package zhuanyeshixi2.basic.controller;

import zhuanyeshixi2.basic.vo.BasicMsg;
import zhuanyeshixi2.basic.service.UserService;
import zhuanyeshixi2.basic.vo.UserVo;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 用户控制器
 * 注意：
 * - 保留原有 /api/users 的所有管理接口（创建/更新/查询/删除等）
 * - 新增兼容性登录与注册接口：POST /api/users/login, POST /api/users/register
 * - 添加 @CrossOrigin 以允许前端跨域访问（开发/调试阶段）
 */
@RestController
@RequestMapping("/api/users")
@CrossOrigin(origins = "*") // 允许跨域访问，解决前端跨域问题
@Tag(name = "用户管理", description = "用户相关操作接口")
public class UserController {

    @Autowired
    private UserService userService;

    // ========== 原有功能（保持不动） ==========
    @PostMapping
    @Operation(summary = "创建用户", description = "创建新用户并分配角色")
    public BasicMsg createUser(@RequestBody UserVo userVo) {
        return userService.addUserWithRoles(userVo);
    }

    @PutMapping("/{username}/roles")
    @Operation(summary = "更新用户角色", description = "更新指定用户的角色列表")
    public BasicMsg updateUserRoles(@PathVariable String username, @RequestBody List<Integer> roleIds) {
        return userService.updateUserRoles(username, roleIds);
    }

    @GetMapping("/{username}")
    @Operation(summary = "查询用户", description = "根据用户名查询用户信息")
    public BasicMsg getUser(@PathVariable String username) {
        return userService.getUserWithRolesByUsername(username);
    }

    @GetMapping("/{username}/roles")
    @Operation(summary = "查询用户角色", description = "查询指定用户的角色列表")
    public BasicMsg getUserRoles(@PathVariable String username) {
        return userService.getUserRoles(username);
    }

    @PutMapping
    @Operation(summary = "更新用户", description = "更新用户基本信息")
    public BasicMsg updateUser(@RequestBody UserVo userVo) {
        return userService.updateUser(userVo);
    }

    @DeleteMapping("/{username}")
    @Operation(summary = "删除用户", description = "删除指定用户")
    public BasicMsg deleteUser(@PathVariable String username) {
        return userService.deleteUser(username);
    }

    // ========== 新增兼容性接口（不破坏原有逻辑） ==========
    // 前端登录一般使用 /api/users/login，这里提供该路由，委托给 UserService 中的登录方法
    @PostMapping("/login")
    @Operation(summary = "用户登录", description = "验证用户名和密码是否正确")
    public BasicMsg login(@RequestBody UserVo userVo) {
        // 假设 UserService 中有 login(UserVo) 方法。如果没有，请在 service 层增加对应方法：
        // public BasicMsg login(UserVo userVo) { ... }
        return userService.login(userVo);
    }

    // 前端注册一般使用 /api/users/register，这里提供该路由
    @PostMapping("/register")
    @Operation(summary = "用户注册", description = "注册新用户")
    public BasicMsg register(@RequestBody UserVo userVo) {
        // 如果 service 层没有 register 方法，可以将其内部调用 addUserWithRoles 或实现自己的注册流程
        return userService.register(userVo);
    }

    // 新增获取所有用户的接口
    @GetMapping
    @Operation(summary = "获取所有用户", description = "获取系统中所有用户列表")
    public BasicMsg getAllUsers() {
        return userService.getAllUsers();
    }

    // 其他管理接口保持不变（如果有更多方法，会继续存在）
}